// 导入数据库操作模块
const db = require('../db/index')
// 导入处理密码的模块
const bcrypt = require('bcryptjs')

const dayjs = require('dayjs')

// 获取用户列表的处理函数
exports.getUserList = (req, res) => {
    //  定义查询用户信息的SQL语句
    const sql = 'select * from ev_users'
    // 调用db.query()执行SQL语句
    db.query(sql,  (err, results) => {
        // 执行SQL语句失败
        if (err) return res.cc(err)
        const start = req.body.pageNo * req.body.pageSize - req.body.pageSize
        const end = req.body.pageNo * req.body.pageSize
        const userList = results.slice(start, end)
        userList.forEach(item => {
            item.creatTime = dayjs(item.creatTime).format('YYYY-MM-DD HH:mm:ss')
        });
        //用户信息获取成功
        res.send({
            code: 200,
            message: '获取用户信息成功',
            data: {
                userList,
                total: results.length,
            }
        })
        
    })
}
// 删除用户的处理函数
exports.deleteUser = (req, res) => {
    //id14以内的用户不能删除
    if (req.params.id>14) {
        const sql1 = 'delete  from ev_order where user_id=?'
    db.query(sql1, req.params.id, (err, results) => {
        if (err) return res.cc(err)
    })

     const sql2 = 'delete from ev_cart where user_id=?'
     db.query(sql2, req.params.id, (err, results) => {
        if (err) return res.cc(err)
     })

    const sql3 = 'delete from ev_users where id=?'
    // 调用db.query()执行SQL语句
    db.query(sql3, req.params.id, (err, results) => {
        // 执行SQL语句失败
        if (err) return res.cc(err)
    })
    res.send({
        code: 200,
        message:'删除成功',
    })
    }else{
        res.send({
            code: 201,
            message:'该账号不能删除',
        })
    }
    
    
}
//封禁与解封用户的处理函数
exports.changeUserBan = (req, res) => {
    const sql = 'update ev_users set isBanned=? where id=?'
    // 调用db.query()执行SQL语句
    db.query(sql, [req.body.type,req.body.id], (err, results) => {
        // 执行SQL语句失败
        if (err) return res.cc(err)
        res.send({
            code: 200,
            message: '用户冻结状态修改成功',
        })
    })
}

// 获取用户基本信息的处理函数
exports.getUserInfo = (req, res) => {
    //  定义查询用户信息的SQL语句
    const sql = 'select * from ev_users where id=?'
    // 调用db.query()执行SQL语句
    db.query(sql, req.user.id, (err, results) => {
        // 执行SQL语句失败
        if (err) return res.cc(err)
        // 执行SQL语句成功,但是查询的结果可能为空
        if (results.length !== 1) return res.cc('获取用户信息失败')

        //用户信息获取成功
        res.send({
            code: 200,
            message: '获取用户信息成功',
            data: results[0],
        })
    })
}
// 更新用户基本信息的处理函数
exports.updateUserInfo = (req, res) => {
    //  定义更新用户信息的SQL语句
    const sql = 'update  ev_users set ? where id=?'
    // 调用db.query()执行SQL语句
    db.query(sql, [req.body, req.body.id], (err, results) => {
        // 执行SQL语句失败
        if (err) return res.cc(err)
        // 执行SQL语句成功,但是查询的结果可能为空
        if (results.affectedRows !== 1) return res.cc('更新用户信息失败')
        //用户信息修改成功
        res.cc('更新用户信息成功')

    })


}

// 重置用户密码的处理函数
exports.updatePassword = (req, res) => {
    //  根据id查询用户的SQL语句
    const sql = 'select * from  ev_users where id=?'
    //1. 执行SQL语句查询用户是否存在
    db.query(sql, req.user.id, (err, results) => {
        // 执行SQL语句失败
        if (err) return res.cc(err)
        // 执行SQL语句成功,但是查询的结果可能为空
        if (results.length !== 1) return res.cc('用户不存在')

        // 2.判断用户数据的旧密码是否正确(用bcrypt中的comparesSync方法对比旧密码是否正确)
        const compareResult = bcrypt.compareSync(req.body.oldPwd, results[0].password)
        if (!compareResult) return res.cc('原密码错误!')

        // 3. 更新数据库中的密码
        // 定义更新用户密码的SQL语句
        const sql = 'update ev_users set password=? where id=?'
        // 对旧密码进行bcrypt加密处理
        const newPwd = bcrypt.hashSync(req.body.newPwd, 10)
        // 执行SQL语句,根据id更新用户的密码
        db.query(sql, [newPwd, req.user.id], (err, results) => {
            // 执行SQL语句失败
            if (err) return res.cc(err)
            // 执行SQL语句成功,但是影响行数不等于1(影响了数据库多条数据)
            if (results.affectedRows !== 1) return res.cc('更新密码失败')
            // 更新密码成功
            res.cc('更新密码成功', 0)
        })


    })

}

// 更新用户头像的处理函数
exports.updateAvatar = (req, res) => {
    // 定义更新头像的SQL语句
    const sql = 'update ev_users set user_pic=? where id=?'
    // 调用db.query()执行SQL语句
    db.query(sql, [req.body.avatar, req.user.id], (err, results) => {
        // 执行SQL语句失败
        if (err) return res.cc(err)
        // 执行SQL语句成功,但是影响行数不等于1(影响了数据库多条数据)
        if (results.affectedRows !== 1) return res.cc('更新头像失败')
        // 成功
        res.cc('更新头像成功!', 0)
    })
}